let oldArrayProtoMethods = Array.prototype;

// 不能直接改写数组原有方法，只有被vue控制的数组才需要
export let arrayMethods = Object.create(Array.prototype);

let methods = ["push", "pop", "shift", "splice", "reverse", "sort"];

// arr[0]

// $set();

methods.forEach((method) => {
  // 切片编程
  arrayMethods[method] = function (...args) {
    // 更新数组，原有方法
    // 数组变化就可以做自己的事情

    // 用户有可能新增的数据是响应式的对象格式，需要进行拦截
    // render();
    let result = oldArrayProtoMethods[method].call(this, ...args);
    let inserted;
    let ob = this.__ob__;
    switch (method) {
      case "push":
      case "unshift":
        inserted = args;
        break;
      case "splice":
        inserted = args.splice(2);
      default:
        break;
    }

    if (inserted) {
      // 调用observe方法
      // this指向的是value
      ob.observeArray(inserted);
    }
    console.log("数组变化");
    return result;
  };
});
